var TOOLS = {
	// 省略号替换
	TextSubstr = function (str, n) {
	    if (str.length > n) {
	        return str.substring(0, n) + "...";
	    } else {
	        return str;
	    }
	},
	// 获取任意参数
	GetQueryString : function(name){
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        var r = window.location.search.substring(1).match(reg);
        if (r != null) return unescape(r[2]); return null;
    },
    // 获取任意参数键值对
    GetArgs : function() {
        var args = {};
        var query = location.search.substring(1);

        if (query !== null && String(query) !== '') {
            // 取得查询串
            var pairs = query.split('&');
            // 循环赋值
            for (var i = 0; i < pairs.length; i++) {
                var pos = pairs[i].indexOf('=');
                // 寻找 "name=value"
                if (Number(pos) === -1) {
                    continue;
                }
                var argname = pairs[i].substring(0, pos); // 取出参数名
                var value = pairs[i].substring(pos + 1); // 取出参数值
                value = decodeURIComponent(value); // 解码请求参数值
                args[argname] = value;
            }
        } else {
            args = null;
        }

        return args;
    },
	/**
	 *  格式化时间
	 *  TOOLS.ReloadPubdate("2016-12-22 22:30:22");
	 */
	ReloadPubdate : function(string) {
		var re = /^(\d{2,4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
		if( re.test(string) ) {
			var t = string.match(re);
			var d = new Date(t[1], t[2]-1, t[3], t[4], t[5], t[6]);
			var c = new Date();
			var s = (c.getTime() - d.getTime())/1000;
			var m = Math.floor(s/60);
			var h = Math.floor(s/3600);
			var d = Math.floor(s/86400);
			var n = Math.floor(s/(86400*30));
			var y = Math.floor(s/(86400*365));
			if(y>0) return y+"年以前"; 
			if(n>0) return n+"个月以前";
			if(d>0) return d+"天以前";
			if(h>0) return h+"小时以前";
			if(m>0) return m+"分钟以前";
		}
		return "刚刚";
	},
	/**
	 *  date 转 str
	 *  TOOLS.LinuxTimeToDate(new Date("2015-12-2 12:12:22"));
	 */
	LinuxTimeToDate : function(day){
	    var Year = 0; 
	    var Month = 0; 
	    var Day = 0; 
	    var CurrentDate = ""; 
	    //初始化时间 
	    //Year= day.getYear();//有火狐下2008年显示108的bug 
	    Year= day.getFullYear();//ie火狐下都可以 
	    Month= day.getMonth()+1; 
	    Day = day.getDate(); 
	    Hour = day.getHours(); 
	    Minute = day.getMinutes(); 
	    Second = day.getSeconds(); 
	    CurrentDate += Year + "-"; 
	    if (Month >= 10 ) { 
	        CurrentDate += Month + "-"; 
	    } 
	    else { 
	        CurrentDate += "0" + Month + "-"; 
	    } 
	    if (Day >= 10 ) { 
	        CurrentDate += Day ; 
	    }else { 
	        CurrentDate += "0" + Day ; 
	    }
	    if(Hour >=10 ){
	    	CurrentDate += " "+Hour ; 
	    }else{
	    	CurrentDate += " 0"+Hour ; 
	    }
	    if(Minute >=10 ){
	    	CurrentDate += ":"+Minute ; 
	    }else{
	    	CurrentDate += ":0"+Minute ; 
	    }
	    if(Second >=10 ){
	    	CurrentDate += ":"+Second ; 
	    }else{
	    	CurrentDate += ":0"+Second ; 
	    }
	    return CurrentDate; 
	},
	//格式化数字为9,999,999的格式
	FormateNum : function(str) {
		var newStr = new Array(str.length + parseInt(str.length / 3));
		var strArray = str.split("");
		newStr[newStr.length - 1] = strArray[strArray.length - 1];
		var currentIndex = strArray.length - 1;
		for (var i = newStr.length - 1; i >= 0; i--) {
			if ((newStr.length - i) % 4 == 0) {
				newStr[i] = ",";
			} else {
				newStr[i] = strArray[currentIndex--];
			}
		}
		var newNum = newStr.join("");
		if (newNum.substr(0, 1) == ",") {
			return newNum.substr(1);
		} else {
			return newNum;
		}
	},

	/**
	 *  PHPdate函数
	 *  TOOLS.Date("l jS \of F Y h:i:s A");
	 */
	Date : function(format, timestamp){   
	    var a, jsdate=((timestamp) ? new Date(timestamp*1000) : new Date());  
	    var pad = function(n, c){  
	        if((n = n + "").length < c){  
	            return new Array(++c - n.length).join("0") + n;  
	        } else {  
	            return n;  
	        }  
	    };  
	    var txt_weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];  
	    var txt_ordin = {1:"st", 2:"nd", 3:"rd", 21:"st", 22:"nd", 23:"rd", 31:"st"};  
	    var txt_months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];  
	var f = {  
	        d: function(){return pad(f.j(), 2)},  
	        D: function(){return f.l().substr(0,3)},  
	        j: function(){return jsdate.getDate()},  
	        l: function(){return txt_weekdays[f.w()]},  
	        N: function(){return f.w() + 1},  
	        S: function(){return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'},  
	        w: function(){return jsdate.getDay()},  
	        z: function(){return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0},  
	        W: function(){  
	            var a = f.z(), b = 364 + f.L() - a;  
	            var nd2, nd = (new Date(jsdate.getFullYear() + "/1/1").getDay() || 7) - 1;  
	            if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b){  
	                return 1;  
	            } else{  
	                if(a <= 2 && nd >= 4 && a >= (6 - nd)){  
	                    nd2 = new Date(jsdate.getFullYear() - 1 + "/12/31");  
	                    return date("W", Math.round(nd2.getTime()/1000));  
	                } else{  
	                    return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);  
	                }  
	            }  
	        },  
	        F: function(){return txt_months[f.n()]},  
	        m: function(){return pad(f.n(), 2)},  
	        M: function(){return f.F().substr(0,3)},  
	        n: function(){return jsdate.getMonth() + 1},  
	        t: function(){  
	            var n;  
	            if( (n = jsdate.getMonth() + 1) == 2 ){  
	                return 28 + f.L();  
	            } else{  
	                if( n & 1 && n < 8 || !(n & 1) && n > 7 ){  
	                    return 31;  
	                } else{  
	                    return 30;  
	                }  
	            }  
	        },  
	        L: function(){var y = f.Y();return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0},  
	        Y: function(){return jsdate.getFullYear()},  
	        y: function(){return (jsdate.getFullYear() + "").slice(2)},  
	        a: function(){return jsdate.getHours() > 11 ? "pm" : "am"},  
	        A: function(){return f.a().toUpperCase()},  
	        B: function(){  
	            var off = (jsdate.getTimezoneOffset() + 60)*60;  
	            var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;  
	            var beat = Math.floor(theSeconds/86.4);  
	            if (beat > 1000) beat -= 1000;  
	            if (beat < 0) beat += 1000;  
	            if ((String(beat)).length == 1) beat = "00"+beat;  
	            if ((String(beat)).length == 2) beat = "0"+beat;  
	            return beat;  
	        },  
	        g: function(){return jsdate.getHours() % 12 || 12},  
	        G: function(){return jsdate.getHours()},  
	        h: function(){return pad(f.g(), 2)},  
	        H: function(){return pad(jsdate.getHours(), 2)},  
	        i: function(){return pad(jsdate.getMinutes(), 2)},  
	        s: function(){return pad(jsdate.getSeconds(), 2)},  
	        O: function(){  
	            var t = pad(Math.abs(jsdate.getTimezoneOffset()/60*100), 4);  
	            if (jsdate.getTimezoneOffset() > 0) t = "-" + t; else t = "+" + t;  
	            return t;  
	        },  
	        P: function(){var O = f.O();return (O.substr(0, 3) + ":" + O.substr(3, 2))},  
	        c: function(){return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P()},  
	        U: function(){return Math.round(jsdate.getTime()/1000)}  
	    };  
	          
	    return format.replace(/[\\]?([a-zA-Z])/g, function(t, s){  
	        if( t!=s ){  
	            // escaped  
	            ret = s;  
	        } else if( f[s] ){  
	            // a date function exists  
	            ret = f[s]();  
	        } else{  
	            // nothing special  
	            ret = s;  
	        }  
	        return ret;  
	    });  
	},
	Strtotime : function(text,now){

		  var parsed, match, today, year, date, days, ranges, len, times, regex, i, fail = false;
		  if (!text) {
		    return fail;
		  }
		  text = text.replace(/^\s+|\s+$/g, '')
		    .replace(/\s{2,}/g, ' ')
		    .replace(/[\t\r\n]/g, '')
		    .toLowerCase();

		  match = text.match(
		    /^(\d{1,4})([\-\.\/\:])(\d{1,2})([\-\.\/\:])(\d{1,4})(?:\s(\d{1,2}):(\d{2})?:?(\d{2})?)?(?:\s([A-Z]+)?)?$/);
		  if (match && match[2] === match[4]) {
		    if (match[1] > 1901) {
		      switch (match[2]) {
		        case '-':
		          { // YYYY-M-D
		            if (match[3] > 12 || match[5] > 31) {
		              return fail;
		            }

		            return new Date(match[1], parseInt(match[3], 10) - 1, match[5],
		              match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
		          }
		        case '.':
		          { // YYYY.M.D is not parsed by strtotime()
		            return fail;
		          }
		        case '/':
		          { // YYYY/M/D
		            if (match[3] > 12 || match[5] > 31) {
		              return fail;
		            }

		            return new Date(match[1], parseInt(match[3], 10) - 1, match[5],
		              match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
		          }
		      }
		    } else if (match[5] > 1901) {
		      switch (match[2]) {
		        case '-':
		          { // D-M-YYYY
		            if (match[3] > 12 || match[1] > 31) {
		              return fail;
		            }

		            return new Date(match[5], parseInt(match[3], 10) - 1, match[1],
		              match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
		          }
		        case '.':
		          { // D.M.YYYY
		            if (match[3] > 12 || match[1] > 31) {
		              return fail;
		            }

		            return new Date(match[5], parseInt(match[3], 10) - 1, match[1],
		              match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
		          }
		        case '/':
		          { // M/D/YYYY
		            if (match[1] > 12 || match[3] > 31) {
		              return fail;
		            }

		            return new Date(match[5], parseInt(match[1], 10) - 1, match[3],
		              match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
		          }
		      }
		    } else {
		      switch (match[2]) {
		        case '-':
		          { // YY-M-D
		            if (match[3] > 12 || match[5] > 31 || (match[1] < 70 && match[1] > 38)) {
		              return fail;
		            }

		            year = match[1] >= 0 && match[1] <= 38 ? +match[1] + 2000 : match[1];
		            return new Date(year, parseInt(match[3], 10) - 1, match[5],
		              match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
		          }
		        case '.':
		          { // D.M.YY or H.MM.SS
		            if (match[5] >= 70) { // D.M.YY
		              if (match[3] > 12 || match[1] > 31) {
		                return fail;
		              }

		              return new Date(match[5], parseInt(match[3], 10) - 1, match[1],
		                match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
		            }
		            if (match[5] < 60 && !match[6]) { // H.MM.SS
		              if (match[1] > 23 || match[3] > 59) {
		                return fail;
		              }

		              today = new Date();
		              return new Date(today.getFullYear(), today.getMonth(), today.getDate(),
		                match[1] || 0, match[3] || 0, match[5] || 0, match[9] || 0) / 1000;
		            }

		            return fail; // invalid format, cannot be parsed
		          }
		        case '/':
		          { // M/D/YY
		            if (match[1] > 12 || match[3] > 31 || (match[5] < 70 && match[5] > 38)) {
		              return fail;
		            }

		            year = match[5] >= 0 && match[5] <= 38 ? +match[5] + 2000 : match[5];
		            return new Date(year, parseInt(match[1], 10) - 1, match[3],
		              match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
		          }
		        case ':':
		          { // HH:MM:SS
		            if (match[1] > 23 || match[3] > 59 || match[5] > 59) {
		              return fail;
		            }

		            today = new Date();
		            return new Date(today.getFullYear(), today.getMonth(), today.getDate(),
		              match[1] || 0, match[3] || 0, match[5] || 0) / 1000;
		          }
		      }
		    }
		  }

		  // other formats and "now" should be parsed by Date.parse()
		  if (text === 'now') {
		    return now === null || isNaN(now) ? new Date()
		      .getTime() / 1000 | 0 : now | 0;
		  }
		  if (!isNaN(parsed = Date.parse(text))) {
		    return parsed / 1000 | 0;
		  }

		  date = now ? new Date(now * 1000) : new Date();
		  days = {
		    'sun': 0,
		    'mon': 1,
		    'tue': 2,
		    'wed': 3,
		    'thu': 4,
		    'fri': 5,
		    'sat': 6
		  };
		  ranges = {
		    'yea': 'FullYear',
		    'mon': 'Month',
		    'day': 'Date',
		    'hou': 'Hours',
		    'min': 'Minutes',
		    'sec': 'Seconds'
		  };

		  function lastNext(type, range, modifier) {
		    var diff, day = days[range];

		    if (typeof day !== 'undefined') {
		      diff = day - date.getDay();

		      if (diff === 0) {
		        diff = 7 * modifier;
		      } else if (diff > 0 && type === 'last') {
		        diff -= 7;
		      } else if (diff < 0 && type === 'next') {
		        diff += 7;
		      }

		      date.setDate(date.getDate() + diff);
		    }
		  }

		  function process(val) {
		    var splt = val.split(' '), // Todo: Reconcile this with regex using \s, taking into account browser issues with split and regexes
		      type = splt[0],
		      range = splt[1].substring(0, 3),
		      typeIsNumber = /\d+/.test(type),
		      ago = splt[2] === 'ago',
		      num = (type === 'last' ? -1 : 1) * (ago ? -1 : 1);

		    if (typeIsNumber) {
		      num *= parseInt(type, 10);
		    }

		    if (ranges.hasOwnProperty(range) && !splt[1].match(/^mon(day|\.)?$/i)) {
		      return date['set' + ranges[range]](date['get' + ranges[range]]() + num);
		    }

		    if (range === 'wee') {
		      return date.setDate(date.getDate() + (num * 7));
		    }

		    if (type === 'next' || type === 'last') {
		      lastNext(type, range, num);
		    } else if (!typeIsNumber) {
		      return false;
		    }

		    return true;
		  }

		  times = '(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec' +
		    '|sunday|sun\\.?|monday|mon\\.?|tuesday|tue\\.?|wednesday|wed\\.?' +
		    '|thursday|thu\\.?|friday|fri\\.?|saturday|sat\\.?)';
		  regex = '([+-]?\\d+\\s' + times + '|' + '(last|next)\\s' + times + ')(\\sago)?';

		  match = text.match(new RegExp(regex, 'gi'));
		  if (!match) {
		    return fail;
		  }
		  for (i = 0, len = match.length; i < len; i++) {
		    if (!process(match[i])) {
		      return fail;
		    }
		  }
		  return (date.getTime() / 1000);
	}
}